package main

import "fmt"

type Hero struct {
	// 如果类的属性首字母为大写的话 那么就代表是共有的 可以直接访问
	Name string
	// 如果类的属性首字母为小写的话 那么代表是私有的 无法直接访问 只能在类的内部进行访问
	name2 string
	Ad    int
	Level int
}

func (hero Hero) Show() {
	fmt.Println("name=", hero.Name)
	fmt.Println("Ad=", hero.Ad)
	fmt.Println("Level=", hero.Level)
	fmt.Println("name2=", hero.name2)
}

/*
这种写法是对 调用该方法对象的一个拷贝 想要修改是无法修改的
*/
func (hero Hero) setName(newName string) {

	hero.Name = newName

}

/*
*
这种写法则是传递对象的地址 进行修改对象的属性值
*/
func (hero *Hero) setNameNew(newName string) {

	hero.Name = newName

}

func main() {
	hero := Hero{Name: "zhangsan3", Ad: 100, Level: 1}
	hero.Show()

	hero.setName("lisi4")
	hero.Show()

	hero.setNameNew("lisi4")
	hero.Show()

	hero.name2 = "3"

}
